/**
 * Created by XianTao on 2015/8/5
 * <p/>
 * Copyright (c) 2015-2015
 * Apache License
 * Version 2.0, January 2004
 * http://www.apache.org/licenses/
 */
package org.lego.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTimeUtil {
    /**
     * 获取当前时间的毫秒数
     *
     * @return 当前时间的毫秒数
     */
    public static long getCurrentTimeMillis() {
        return System.currentTimeMillis();
    }

    /**
     * 获取当前时间的秒数
     *
     * @return 当前时间的秒数
     */
    public static Integer getCurrentTimeSeconds() {
        return (int) (getCurrentTimeMillis() / 1000);
    }

    /**
     * 获取当前时间的字符串
     *
     * @return 字符串格式为：yyyy年MM月dd日HH:mm:ss
     */
    public static String getCurrentFullDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
        return sdf.format(new Date());
    }

    /**
     * 获取当前时间的字符串
     *
     * @return 字符串格式为：yyyyMMdd
     */
    public static String getCurrentShortDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        return sdf.format(new Date());
    }

    /**
     * 获取指定时间的字符串
     *
     * @return 字符串格式为：yyyyMMdd
     */
    public static String getShortDate(long millis) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        return sdf.format(new Date(millis));
    }

    /**
     * 获取当前时间的字符串
     *
     * @return 字符串格式为：yyyyMMddHHmm
     */
    public static String getCurrentShortDateTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        return sdf.format(new Date());
    }

    /**
     * 获取当前时间0点的毫秒数
     *
     * @return 当前时间0点的毫秒数
     */
    public static long getCurrentMidnightMillis() {
        try {
            return parseShortDate(getCurrentShortDate()).getTime();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取当月1日0点的毫秒数
     */
    public static long getCurrentMonthMillis() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
        try {
            return sdf.parse(sdf.format(new Date())).getTime();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取当年1月1日0点的毫秒数
     */
    public static long getCurrentYearMillis() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        try {
            return sdf.parse(sdf.format(new Date())).getTime();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取指定时间0点的毫秒数
     *
     * @return 指定时间0点的毫秒数
     */
    public static long getMidnightMillis(long millis) {
        try {
            return parseShortDate(getShortDate(millis)).getTime();
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取当前时间的字符串
     *
     * @return 字符串格式为：yyyyMMddHHmm
     */
    public static Date parseShortDateTime(String shortDateTime) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        return sdf.parse(shortDateTime);
    }

    /**
     * 获取当前时间的字符串
     *
     * @return 字符串格式为：yyyyMMdd
     */
    public static Date parseShortDate(String shortDate) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        return sdf.parse(shortDate);
    }

    /**
     * 获取全日期字符字符串
     *
     * @param millis 毫秒
     * @return 字符串格式为：yyyyMMddHHmmss
     */
    public static String getFullDateTime(long millis) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return sdf.format(new Date(millis));
    }
}
